iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Modern Web

Hello TypeScript 菜鳥系列 第 7

Day 6. TypeScript 參考型別:Array

  • 分享至 

  • xImage
  •  

Day 6 開始是認識參考型別(reference type)。

TypeScript的基本型別(primitive type)除了有以下七種JavaScript就有的基本型別:

  • string
  • number
  • boolean
  • undefined
  • null
  • symbol
  • bigint

還有TypeScript自己內建的基本型別 anyunknownvoidnever,除此之外都是參考型別。

今天開始同樣是先介紹在 JavaScript 也有的 Array 和 Object,不過由於 Object 的篇幅比較長,明天才會討論 Object。

另外,為了凸顯 TypeScript 和 JavaScript 的不同,這兩篇文章也會稍微深入一點點這兩個型別在TypeScript的特性和使用方式。


Array

在JavaScript裡面,一個陣列(array)型別可以儲存任意型別的元素,例如:

// JavaScript
let arr = [1, hello", false];

而TypeScript則是可以指定只能儲存特定型別的陣列,其宣告方式如下:

// TypeScript
let strArr: string[] = ["1", "2", "3"];    // 只能儲存string型別元素的array
strArr.push("4");                    // ok, ["1", "2", "3", "4"]

let numArr: number[] = [1, 2, 3]    // 只能儲存number型別元素的array

numArr.push("4");    // error, number型別array不能儲存string型別的"4"

如果宣告了一個儲存 any 型別元素的陣列,就等於是在TypeScript的世界裡,使用了一個JavaScript版本的陣列:

// TypeScript
let anyArr: any[] = [1, "hello", false];
anyArr.push("4");        // ok, [1, "hello", false, "4"]

當然,陣列的元素也可以是參考型別,例如宣告一個可儲存物件型別元素的陣列:

let person: {id: number, name: string}[] = [
    {id: 1, name: "Alice"},
    {id: 2, name: "Ban"},
    {id: 3, name: "Crow"},
];

不過當今天想要儲存不同型別元素,而且不想儲存物件型別又不希望宣告一個 any 型別的陣列,TypeScript也能指定可儲存特定基礎型別元素的陣列

例如宣告一個可儲存 string 型別元素們同時也能儲存 number 型別元素們的陣列,宣告方式如下:

let snArr: (string | number) = [1, "2", 3];

snArr.push("4");    // ok

像上面這段 string | number 可以是 string 也可以是 number 的用法,在TypeScript裡稱作 Union 型別。

過幾天會再詳細一點介紹 Union 這個型別,今天只是想多說明一下有其他比較特別的宣告方式,所以就點到為止吧。

最後,稍微提一下,TypeScript畢竟是從JavaScript延伸出來的,所以JavaScript陣列擁有的方法,基本上TypeScript陣列也都會有,例如 pushpopforEachmap 等。


參考資料
TypeScript: JavaScript With Syntax For Types
TypeScript Tutorial


上一篇
Day 5. TypeScript內建的基本型別:any、unknown、void、never
下一篇
Day 7. TypeScript 參考型別:Object
系列文
Hello TypeScript 菜鳥31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言